#include <iostream>
#include <math.h>
#include <string.h>
using namespace std;
/*浅拷贝是指只拷贝对象的成员变量，而不拷贝对象所指向的动态分配的内存。
在浅拷贝中，如果对象的成员变量中有指针，那么拷贝后的指针将指向原始对象所指向的内存，而不是复制一份新的内存。
这可能会导致一些问题，例如，如果原始对象被删除或修改，那么拷贝后的对象也会受到影响。*/
class myString
{
public:
    char * pStr;
    int len;
public:
    myString()
    {
        cout<<"构造函数1"<<endl;
        pStr = NULL;
        len = 0;
    }
    explicit myString(const char * pStr) //
    {
        cout<<"构造函数2"<<endl;
        len = strlen(pStr);//得到传入的字符串的长度
        this->pStr = new char[len+1];//分配一个与传入数据一样大的空间，+1是为了存放字符串的结束标记
        strcpy(this->pStr,pStr);//把传入的数据拷贝到我们自己的空间，这样就可以修改自己的数据了
    }

};

int main()
{
    myString str2("efg");//与上面一行代码等效
    myString str1 = str2;//构造函数的另一种调用方式，通过预制匹配的等于号调用

    str1.pStr[0] = 't';

    cout<<str1.pStr<<" "<<str2.pStr<<endl;


    return 0;
}
